package com.cute.leetcode.editor.cn;
import java.util.*;

public class HJ28SuShuBanLv {
    /**
     * 匈牙利算法，先到先得，保持最新（能让就让）
     */
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()){
            int n = sc.nextInt();
            ArrayList<Integer> odds = new ArrayList<Integer>();//保存奇数
            ArrayList<Integer> evens = new ArrayList<Integer>();//保存偶数
            for (int i = 1; i <= n; i++){
                int num = sc.nextInt();
                if ((num & 1) == 1) odds.add(num);
                else evens.add(num);
            }
            int res = 0;
            int[] matched = new int[evens.size()];// 偶数对应下标位置保存匹配到的奇数值
            for (int odd : odds){
                // 每次都需要清空
                boolean[] visited = new boolean[evens.size()];// 当前位置是否被访问了
                if (match(odd, matched, evens, visited)) res++;
            }
            System.out.println(res);
        }
    }
    private static boolean match(int num, int[] matched, ArrayList<Integer> evens, boolean[] visited){
        for (int i = 0; i < evens.size(); i++){
            if (isPrime(num + evens.get(i)) && !visited[i]){// 当前位置访问过了直接跳过
                visited[i] = true;
                // 先到先得，能让就让
                if (matched[i] == 0 || match(matched[i], matched, evens, visited)){
                    // 如果当前偶数之前已经匹配到了奇数
                    // 但是该奇数可以匹配到其他的偶数，就把原来的奇数与其他的进行偶数匹配罢了
                    // 当前偶数匹配最新的奇数
                    matched[i] = num;
                    return true;
                }
            }
        }
        return false;
    }
    private static boolean isPrime(int num){//判断是否为素数
        if (num == 1) return false;
        for(int i = 2; i <= Math.sqrt(num); i++)
            if (num % i == 0) return false;
        return true;
    }
}
